home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_480 / tpledit / src / gad.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  3KB  |  168 lines

  1.  
  2. /*
  3.  *  GAD.C
  4.  *
  5.  *  Gadget [re]construction
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10. Prototype void ReMakeEverything(void);
  11. Prototype Gadget *MakeGadget(TplRegion *, Gadget *);
  12. Prototype Gadget *MakeAllGadgets(void);
  13. Prototype void DisableGadgets(void);
  14. Prototype void EnableGadgets(void);
  15.  
  16. Prototype short GadDisabled;
  17.  
  18. short GadDisabled;
  19.  
  20. void
  21. ReMakeEverything()
  22. {
  23.     MakeAllGadgets();
  24.     RefreshGList(GList, Win, NULL, -1);
  25.     GT_RefreshWindow(Win, NULL);
  26. }
  27.  
  28.  
  29. Gadget *
  30. MakeAllGadgets()
  31. {
  32.     TplRegion *rg;
  33.     Gadget *gad;
  34.  
  35.     if (GList) {
  36.     if (Win) {
  37.         short cnt = 0;
  38.         for (gad = GList; gad; ++cnt, gad = gad->NextGadget) {
  39.         if (gad->GadgetType & GTYP_SYSGADGET)
  40.             break;
  41.         }
  42.         RemoveGList(Win, GList, cnt);
  43.         SetRast(Win->RPort, 0);
  44.         RefreshWindowFrame(Win);
  45.     }
  46.     FreeGadgets(GList);
  47.     GList = NULL;
  48.     }
  49.     if (gad = CreateContext(&GList)) {
  50.     if (DDebug)
  51.         printf("GLIST %08lx gad %08lx\n", GList, gad);
  52.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  53.         rg->rg_Flags &= ~RGF_DEFERED;
  54.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  55.         if (rg->rg_LockedTo && rg->rg_Type == RGT_SELLIST)
  56.         rg->rg_Flags |= RGF_DEFERED;
  57.         else
  58.         gad = MakeGadget(rg, gad);
  59.     }
  60.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  61.         if (rg->rg_Flags & RGF_DEFERED)
  62.         gad = MakeGadget(rg, gad);
  63.     }
  64.     }
  65.     if (Win) {
  66.     AddGList(Win, GList, 0, -1, NULL);
  67.     if (GadDisabled)
  68.         DisableGadgets();
  69.     }
  70.     return(gad);
  71. }
  72.  
  73. Gadget *
  74. MakeGadget(rg, gad)
  75. TplRegion *rg;
  76. Gadget *gad;
  77. {
  78.     if (rg->rg_Type == 0)
  79.     return(gad);
  80.  
  81.     Ng.ng_LeftEdge  = rg->rg_Box.bo_Xs;
  82.     Ng.ng_TopEdge   = rg->rg_Box.bo_Ys;
  83.     Ng.ng_Width     = rg->rg_Box.bo_Xe - rg->rg_Box.bo_Xs + 1;
  84.     Ng.ng_Height    = rg->rg_Box.bo_Ye - rg->rg_Box.bo_Ys + 1;
  85.     Ng.ng_GadgetText= rg->rg_LabText;
  86.     Ng.ng_TextAttr  = &rg->rg_TextAttr;
  87.     Ng.ng_GadgetID  = rg->rg_Id;
  88.     Ng.ng_Flags     = rg->rg_Flags;
  89.     Ng.ng_UserData  = rg;
  90.  
  91.     if (Ng.ng_Width < 8 || Ng.ng_Height < 8) {
  92.     printf("Size Error %d %d\n", Ng.ng_Width, Ng.ng_Height);
  93.     return;
  94.     }
  95.  
  96.     if (DDebug)
  97.     printf("TYPE %d\n", rg->rg_Type);
  98.  
  99.     switch(rg->rg_Type) {
  100.     case RGT_INVISIBLE:
  101.     break;
  102.     case RGT_BUTTON:
  103.     rg->rg_Gad = CreateGadget(BUTTON_KIND, gad, &Ng,
  104.         TAG_END
  105.     );
  106.     break;
  107.     case RGT_ENTRY:
  108.     rg->rg_Gad = CreateGadget(STRING_KIND, gad, &Ng,
  109.         GTST_MaxChars, rg->rg_MaxBufLen,
  110.         GTST_String, rg->rg_DefText,
  111.         TAG_END
  112.     );
  113.     break;
  114.     case RGT_SELLIST:
  115.     rg->rg_Gad = CreateGadget(LISTVIEW_KIND, gad, &Ng,
  116.         GTLV_Labels, &rg->rg_ListSet,
  117.         GTLV_Selected, (rg->rg_DefText ? atoi(rg->rg_DefText) : 0),
  118.         ((rg->rg_LockedTo) ? GTLV_ShowSelected : TAG_IGNORE), rg->rg_LockedTo->rg_Gad,
  119.         TAG_END
  120.     );
  121.     break;
  122.     case RGT_CYCLE:
  123.     rg->rg_Gad = CreateGadget(CYCLE_KIND, gad, &Ng,
  124.         GTCY_Labels, rg->rg_CycleAry,
  125.         GTCY_Active, (rg->rg_DefText ? atoi(rg->rg_DefText) : 0),
  126.         TAG_END
  127.     );
  128.     break;
  129.     default:
  130.     break;
  131.     }
  132.     return(rg->rg_Gad);
  133. }
  134.  
  135. void
  136. DisableGadgets()
  137. {
  138.     TplRegion *rg;
  139.  
  140.     GadDisabled = 1;
  141.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  142.     if (rg->rg_Gad) {
  143.         GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  144.         GA_Disabled, 1,
  145.         TAG_END
  146.         );
  147.     }
  148.     }
  149. }
  150.  
  151. void
  152. EnableGadgets()
  153. {
  154.     TplRegion *rg;
  155.  
  156.     GadDisabled = 0;
  157.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  158.     if (rg->rg_Gad) {
  159.         GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  160.         GA_Disabled, 0,
  161.         TAG_END
  162.         );
  163.     }
  164.     }
  165.     GT_RefreshWindow(Win, NULL);
  166. }
  167.  
  168.